Skip to content

docs(autoscaling): add cluster-autoscaler guides for Hetzner and Azure#419

Merged
kvaps merged 1 commit intomainfrom
docs/cluster-autoscaler
Feb 16, 2026
Merged

docs(autoscaling): add cluster-autoscaler guides for Hetzner and Azure#419
kvaps merged 1 commit intomainfrom
docs/cluster-autoscaler

Conversation

@kvaps
Copy link
Member

@kvaps kvaps commented Feb 10, 2026

Summary

  • Add comprehensive cluster-autoscaler documentation under operations/cluster/autoscaling/
  • Covers Hetzner Cloud (snapshot creation, vSwitch, secrets, Package deployment)
  • Covers Azure (VNet/NSG setup, VHD image upload, VMSS creation, WireGuard endpoint config)
  • Includes configuration reference tables, troubleshooting sections, and Kilo integration notes

Test plan

  • Verify Hugo renders pages correctly with hugo serve
  • Check navigation structure under Cluster Maintenance
  • Verify Hugo shortcodes render properly

Summary by CodeRabbit

  • Documentation
    • Added comprehensive guides for extending management clusters across multiple physical locations
    • Included setup instructions for networking mesh, local cloud controller manager, and cluster autoscaling
    • Added provider-specific deployment guides for Azure and Hetzner Cloud

@netlify
Copy link

netlify bot commented Feb 10, 2026

Deploy Preview for cozystack ready!

Name Link
🔨 Latest commit a989932
🔍 Latest deploy log https://app.netlify.com/projects/cozystack/deploys/699346a490b4c5000859a9ed
😎 Deploy Preview https://deploy-preview-419--cozystack.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 10, 2026

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Walkthrough

A new documentation structure for multi-location Cozystack management clusters is added, covering three core components: Networking Mesh (Kilo WireGuard with Cilium IPIP), Local Cloud Controller Manager, and Cluster Autoscaling with provider-specific guides for Azure and Hetzner Cloud.

Changes

Cohort / File(s) Summary
Multi-location Overview
content/en/docs/v1/operations/multi-location/_index.md
Introduces the multi-location extension framework, outlining the three key infrastructure components required: networking mesh, local CCM, and cluster autoscaling.
Cluster Autoscaling Documentation
content/en/docs/v1/operations/multi-location/autoscaling/_index.md, content/en/docs/v1/operations/multi-location/autoscaling/azure.md, content/en/docs/v1/operations/multi-location/autoscaling/hetzner.md
Provides autoscaling architecture overview and detailed provider-specific implementation guides, including infrastructure setup, machine configuration, VMSS/instance group deployment, package installation, and validation procedures.
Infrastructure Components
content/en/docs/v1/operations/multi-location/local-ccm.md, content/en/docs/v1/operations/multi-location/networking-mesh.md
Documents the Local Cloud Controller Manager for IP detection and node lifecycle management, and Networking Mesh setup with Kilo WireGuard and Cilium IPIP encapsulation, including machine annotations and troubleshooting guidance.

Poem

🐰 Across the lands our clusters grow,
With mesh networks that brightly glow,
Cloud nodes scale without a care,
Multi-location everywhere!
Hop hop hop, to every cloud we go!

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch docs/cluster-autoscaler

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @kvaps, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly expands the Cozystack documentation by introducing comprehensive guides for setting up and managing Kubernetes Cluster Autoscaler on Hetzner Cloud and Azure. These new resources empower users to implement automatic node scaling for their Cozystack management clusters, ensuring efficient resource utilization and responsiveness to workload demands across different cloud environments.

Highlights

  • New Cluster Autoscaler Documentation: Added comprehensive documentation for Kubernetes Cluster Autoscaler under operations/cluster/autoscaling/ to guide users through automatic node scaling.
  • Hetzner Cloud Integration: Included a detailed guide for integrating Cluster Autoscaler with Hetzner Cloud, covering snapshot creation, vSwitch configuration, secret management, and package deployment.
  • Azure Integration: Provided a step-by-step guide for configuring Cluster Autoscaler on Azure, detailing VNet/NSG setup, VHD image upload, Virtual Machine Scale Set (VMSS) creation, and WireGuard endpoint configuration.
  • Comprehensive Reference and Troubleshooting: Incorporated configuration reference tables, troubleshooting sections, and notes on Kilo integration for both Hetzner Cloud and Azure providers.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • content/en/docs/operations/cluster/autoscaling/_index.md
    • Added an introductory page for cluster autoscaling documentation.
  • content/en/docs/operations/cluster/autoscaling/azure.md
    • Added a new guide detailing the setup of Cluster Autoscaler for Azure.
    • Included steps for Azure infrastructure creation, Talos image preparation, VMSS configuration, and Kilo WireGuard endpoint setup.
    • Provided troubleshooting tips and testing procedures specific to Azure.
  • content/en/docs/operations/cluster/autoscaling/hetzner.md
    • Added a new guide detailing the setup of Cluster Autoscaler for Hetzner Cloud.
    • Included steps for creating Talos images via snapshot, configuring Hetzner vSwitch, and managing Kubernetes secrets.
    • Provided configuration references, troubleshooting tips, and Kilo integration notes specific to Hetzner.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds comprehensive documentation for setting up cluster autoscaling on Hetzner Cloud and Azure. The guides are detailed and cover infrastructure setup, image creation, configuration, and troubleshooting. I've found a few areas for improvement, primarily around security practices in the Azure guide, such as avoiding plaintext credentials in shell history and Kubernetes manifests. I've also noted a potential typo in a Kubernetes version in the Hetzner guide. My suggestions aim to make the documentation more secure and accurate for users.

Comment on lines +247 to +250
azureClientID: "<APP_ID>"
azureClientSecret: "<PASSWORD>"
azureTenantID: "<TENANT_ID>"
azureSubscriptionID: "<SUBSCRIPTION_ID>"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Storing credentials like azureClientSecret directly in the YAML is a critical security risk, as they will be committed to version control in plaintext. You should create a Kubernetes secret to hold these credentials and reference it from the Package definition. This follows the best practice already demonstrated in the Hetzner autoscaler guide.

First, add a new step to create a secret with your Azure credentials:

# This secret should be created in the same namespace as the package
kubectl create secret generic azure-credentials \
  --from-literal=AZURE_CLIENT_ID="<APP_ID>" \
  --from-literal=AZURE_CLIENT_SECRET="<PASSWORD>" \
  --from-literal=AZURE_TENANT_ID="<TENANT_ID>" \
  --from-literal=AZURE_SUBSCRIPTION_ID="<SUBSCRIPTION_ID>"

Then, update the Package resource to use these secrets via environment variables. The cluster-autoscaler for Azure can read credentials from environment variables.

Suggested change
azureClientID: "<APP_ID>"
azureClientSecret: "<PASSWORD>"
azureTenantID: "<TENANT_ID>"
azureSubscriptionID: "<SUBSCRIPTION_ID>"
extraEnvSecrets:
AZURE_CLIENT_ID:
name: azure-credentials
key: AZURE_CLIENT_ID
AZURE_CLIENT_SECRET:
name: azure-credentials
key: AZURE_CLIENT_SECRET
AZURE_TENANT_ID:
name: azure-credentials
key: AZURE_TENANT_ID
AZURE_SUBSCRIPTION_ID:
name: azure-credentials
key: AZURE_SUBSCRIPTION_ID

Comment on lines +22 to +25
az login --service-principal \
--username "<APP_ID>" \
--password "<PASSWORD>" \
--tenant "<TENANT_ID>"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Using the --password flag with a plaintext password in the az login command is a security risk, as the password can be stored in your shell's history file. A more secure method is to use environment variables for credentials.

The Azure CLI will automatically pick up the AZURE_CLIENT_SECRET environment variable for the password.

Suggested change
az login --service-principal \
--username "<APP_ID>" \
--password "<PASSWORD>" \
--tenant "<TENANT_ID>"
export AZURE_CLIENT_ID="<APP_ID>"
export AZURE_CLIENT_SECRET="<PASSWORD>"
export AZURE_TENANT_ID="<TENANT_ID>"
az login --service-principal \
--username "$AZURE_CLIENT_ID" \
--tenant "$AZURE_TENANT_ID"

@kvaps kvaps force-pushed the docs/cluster-autoscaler branch 7 times, most recently from 498973f to b8095ce Compare February 16, 2026 16:29
Add comprehensive documentation for extending Cozystack management
clusters across multiple physical locations using Kilo WireGuard mesh
with Cilium IPIP encapsulation.

The guide covers:
- Networking Mesh setup (Kilo + Cilium configuration)
- Cluster Autoscaling for Hetzner Cloud and Azure
- Local Cloud Controller Manager for node lifecycle

Co-Authored-By: Claude <[email protected]>
Signed-off-by: Andrei Kvapil <[email protected]>
@kvaps kvaps force-pushed the docs/cluster-autoscaler branch from b8095ce to a989932 Compare February 16, 2026 16:32
@kvaps kvaps marked this pull request as ready for review February 16, 2026 16:36
@kvaps kvaps merged commit 0db0804 into main Feb 16, 2026
5 of 6 checks passed
@kvaps kvaps deleted the docs/cluster-autoscaler branch February 16, 2026 16:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant